<?php

class UsuarioController extends Zend_Controller_Action
{
       
        
	public function indexAction(){
		$this->_helper->viewRenderer->setNoRender();
	}

	
	public function criarAction(){
            
            $this->view->error = $this->getParam('error');
            
            if (!is_null($this->getParam('nm_pessoa'))){
                $tUsuario = new DbTable_Usuario();
               
                $usuario = $tUsuario->createRow();
                $usuario->ds_senha = sha1($this->getParam('ds_senha'));
                $usuario->tp_usuario = TipoUsuario::CLIENTE;
                $usuario->dt_aniversario = $this->getParam('dt_aniversario');
                $usuario->dt_cadastro = date('d/m/Y');
                $usuario->st_usuario = TipoBloqueio::DESBLOQUEADO;
                $usuario->nm_pessoa = strtoupper($this->getParam('nm_pessoa'));
                $usuario->ds_email = strtoupper($this->getParam('ds_email')); 

                if ($this->getParam('flag') == 'facebook'){
                	$usuario->id_user_facebook = $this->getParam('id_facebook');
                	$data = explode('_', $this->getParam('dt_aniversario'));
                	
                	$senha = $data[1] . $data[0] . $data[2];
                	$usuario->ds_senha = sha1($senha);
                	
                	$usuario->dt_aniversario = $data[1] . '/' . $data[0] . '/' . $data[2];
                	
                	$usuario->save();
                	
                	$this->redirect("/acesso/login/login/{$usuario->ds_email}/password/{$senha}");
                }else{
                    if (DbTable_Usuario::hasUsuario($usuario->ds_email)){
                        $this->redirect("/usuario/criar/error/" . Messages::USUARIO_EXISTENTE);                                       
                    }
                    
                    $usuario->save();
                    $this->redirect("/acesso/login/login/{$usuario->ds_email}/password/{$this->getParam('ds_senha')}");                                       
                }
                
                

            }
	}
        
        
        public function bloquearAction(){
		$this->_helper->viewRenderer->setNoRender();
                $tUsuario = new DbTable_Usuario();
                
                $id = $this->getParam('idUsuario');
                $usuario = $tUsuario->find($id)->current();
                
                if ($usuario->st_usuario == TipoBloqueio::BLOQUEADO){
                    $usuario->st_usuario = TipoBloqueio::DESBLOQUEADO;
                    $msg = Messages::USUARIO_DESBLOQUEADO_SUCESSO;
                }else{
                    $usuario->st_usuario = TipoBloqueio::BLOQUEADO;
                    $msg = Messages::USUARIO_BLOQUEADO_SUCESSO;
                }
                
                $usuario->save();
                                
                $this->redirect('/usuario/listar/message/' . $msg);
	}
        
        
        public function administrarAction(){
		$this->_helper->viewRenderer->setNoRender();
                $tUsuario = new DbTable_Usuario();
                
                $id = $this->getParam('idUsuario');
                $usuario = $tUsuario->find($id)->current();
                
                if ($usuario->tp_usuario == TipoUsuario::ADMINISTRADOR){
                    $usuario->tp_usuario = TipoUsuario::CLIENTE;
                }else{
                    $usuario->tp_usuario = TipoUsuario::ADMINISTRADOR;
                }
                
                $usuario->save();
                                
                $this->redirect('/usuario/listar');
	}
        
        
        public function boardAction(){
            $session = new Zend_Session_Namespace('role');
            $usuario = DbTable_Usuario::buscarUsuarioPorId($session->idUsuario);
            
            $this->view->qtdColaboracoesPositivas = count($usuario->getColaboracoesPositivas());
            $this->view->qtdColaboracoesNegativas = count($usuario->getColaboracoesNegativas());
            $this->view->mercadosPreferidos = $usuario->getMercadosPreferidos();
            
            $totalColaboracaoes = $this->view->qtdColaboracoesPositivas + $this->view->qtdColaboracoesNegativas;
            $fatorDivisao = $totalColaboracaoes == 0 ? 1 : $totalColaboracaoes;
            
            $percentualPositivo = ($this->view->qtdColaboracoesPositivas * 100) / $fatorDivisao;
            $percentualNegativo = ($this->view->qtdColaboracoesNegativas * 100) / $fatorDivisao;
            
            $this->view->percentualPositivo = $percentualPositivo;
            $this->view->percentualNegativo = $percentualNegativo;
            $this->view->totalColaboracoes = $totalColaboracaoes;
            
            $tColaboracao = new DbTable_ColaboracaoProduto();
            $promocoesMercado = array();
            $idsMercado = array();
            
            foreach ($this->view->mercadosPreferidos as $mercadoPreferido) {
                $promocoesMercado[$mercadoPreferido->id_mercado] = $tColaboracao->buscarPromocoes($mercadoPreferido->id_mercado);
                array_push($idsMercado, $mercadoPreferido->id_mercado); 
            }
           
            if (!is_null($this->getParam('message'))){
            	$this->view->message = $this->getParam('message');
            }

            $this->view->idsMercado = $idsMercado;
            $this->view->promocoes = $promocoesMercado;
            
        }
        
        
        public function listarAction(){
            $usuarios = DbTable_Usuario::getUsuarios();
            
            $this->view->usuarios = $usuarios;
        }
        
        
        public function simulacaoAction(){
        	$tMercado = new DbTable_Mercado();
        	$tLista = new DbTable_ListaCompra();
        	$session = new Zend_Session_Namespace('role');
        	$gps = new Zend_Session_Namespace('gps');
        	$usuario = DbTable_Usuario::buscarUsuarioPorId($session->idUsuario);
        	$coordenada = $usuario->getRegiaoPreferencia();
        	$listas = $usuario->getListas();
        	$mercados = array();
        	$simulacoes = array(TipoSimulacao::MERCADO_PREFERIDO => array(), TipoSimulacao::GEOLOCALIZACAO => array(), TipoSimulacao::REGIAO_PREFERIDA => array());
        	
	        foreach ($tMercado->fetchAll() as $mercado) {						
	            if ($mercado->ehPreferido($usuario->id_usuario)){
	                 array_push($mercados, array('tipo' => TipoSimulacao::MERCADO_PREFERIDO,'id_mercado' => $mercado->id_mercado, 'nm_mercado' => $mercado->nm_mercado));
	            }elseif ($mercado->estahNaArea($coordenada->vl_latitude, $coordenada->vl_longitude)){
	                array_push($mercados, array('tipo' => TipoSimulacao::REGIAO_PREFERIDA,'id_mercado' => $mercado->id_mercado, 'nm_mercado' => $mercado->nm_mercado));
	            }elseif ($mercado->estahNaArea($gps->latitude, $gps->longitude)){
	            	array_push($mercados, array('tipo' => TipoSimulacao::GEOLOCALIZACAO ,'id_mercado' => $mercado->id_mercado, 'nm_mercado' => $mercado->nm_mercado));
	            }
	        }        
	        

	        if (is_null($this->getParam('id_lista'))){
	        	$lista = $usuario->getListas()->current();
	        }else{
	        	$lista = $tLista->find($this->getParam('id_lista'))->current();
	        }
	        
	        foreach ($mercados as $mercado) {
	        	$simulacoes[$mercado['tipo']][$lista->nm_lista][] = array('valor' => DbTable_ListaCompra::buscarItensPorMercadoSimulacao($lista->id_lista_compra, $mercado['id_mercado']),
	        			'id' => $mercado['id_mercado'], 'nome' => $mercado['nm_mercado']);
	        }
	        
	        $this->view->lista = $lista;
	        $this->view->listas = $listas;
	        $this->view->simulacoes = $simulacoes;
        	
        }
        
        
        public function alterarSenhaAction(){
        	
        	
        	if (!is_null($this->getParam('ds_senha'))){
        		$session = new Zend_Session_Namespace('role');
        		$usuario = DbTable_Usuario::buscarUsuarioPorId($session->idUsuario);
        		$usuario->ds_senha = sha1($this->getParam('ds_senha'));
        		$usuario->save();
        		
        		return $this->redirect("/usuario/board/message/".Messages::SENHA_ALTERADA);
        	}
        }
        
        
        public function recuperarSenhaAction(){
                        
            if (!is_null($this->getParam('ds_email'))){
            	$dataAniversario = $this->getParam('dt_aniversario');
            	
				if (preg_match('/^\d{1,2}\/\d{1,2}\/\d{4}$/', $dataAniversario)) {                
                
                    $tUsuario = new DbTable_Usuario();
                    $usuarios = $tUsuario->fetchAll(array('ds_email = (?)' => strtoupper($this->getParam('ds_email')), 'dt_aniversario = (?)' => $this->getParam('dt_aniversario')));

                    if (count($usuarios) > 0){                                       
                    	$usuario = $usuarios->current();
                                               
                        $usuario->ds_senha = sha1('123');
                        $usuario->save();
                        $this->redirect("/acesso/login/login/{$usuario->ds_email}/password/123/reset/true");
                    }else{
                        $this->view->message = Messages::LOGIN_USUARIO_INCORRETO;
                    }
                }else{
                    $this->view->message = Messages::DATA_PADRAO_INVALIDO;
                }
            }
        }
        
        
        
        public function alterarRegiaoPreferenciaAction(){}
        
        
        public function linkarContaFacebookAction(){}
        
        
        public function ajaxValidaSenhaAction(){
        	$this->_helper->viewRenderer->setNoRender();
        	$this->_helper->layout->disableLayout();
        	
        	$session = new Zend_Session_Namespace('role');
        	$usuario = DbTable_Usuario::buscarUsuarioPorId($session->idUsuario);
        	
        	echo json_encode($usuario->passIsCorrect($this->getParam('pass')));
        }
        
        
        public function ajaxAlterarRegiaoPreferenciaAction(){
            $this->_helper->viewRenderer->setNoRender();
            $this->_helper->layout->disableLayout();
            
            $session = new Zend_Session_Namespace('role');
            $usuario = DbTable_Usuario::buscarUsuarioPorId($session->idUsuario);
            
            $coordenada = $usuario->getRegiaoPreferencia();
            
            if (is_null($coordenada)){
                $tCoordenada = new DbTable_Coordenada();
                $coordenada = $tCoordenada->createRow();
                $coordenada->tp_coordenada = TipoCoordenada::REGIAO_PREFERENCIA;
            }
            
            $coordenada->vl_latitude = $this->getParam('latitude');
            $coordenada->vl_longitude = $this->getParam('longitude');
            
            $idCoordenada = $coordenada->save();
            
            $usuario->id_coordenada = $idCoordenada;
            $usuario->save();
            
            echo json_encode('ok');
        }
        
        
        public function ajaxBuscarRegiaoPreferenciaAction(){
            $this->_helper->viewRenderer->setNoRender();
            $this->_helper->layout->disableLayout();
            
            $session = new Zend_Session_Namespace('role');
            $usuario = DbTable_Usuario::buscarUsuarioPorId($session->idUsuario);
            
            $coordenada = $usuario->getRegiaoPreferencia();
            
            
            echo json_encode((is_null($coordenada) ? null : $coordenada->toArray()));
        }
        
        
        public function ajaxAtualizarLinkFacebookAction(){
        	$this->_helper->viewRenderer->setNoRender();
        	$this->_helper->layout->disableLayout();
        	
        	$session = new Zend_Session_Namespace('role');
        	$usuario = DbTable_Usuario::buscarUsuarioPorId($session->idUsuario);
        	        	
        	$idUserFace = $this->getParam('id_facebook');
        	
        	$usuario->id_user_facebook = $idUserFace;
        	$usuario->save();
        	
        	echo json_encode('ok');
        }
        
        

        public function ajaxEstahCadastradoAction(){
        	$this->_helper->viewRenderer->setNoRender();
        	$this->_helper->layout->disableLayout();
        	 
        	$tUsuario = new DbTable_Usuario();
        	$usuario = $tUsuario->fetchAll(array('ds_email = (?)' => strtoupper($this->getParam('email'))));
      	
        	if (count($usuario) > 0) echo json_encode('true');
        	else echo json_encode('false');
        }
	
}

